#include "main.h"

static void n_nop(u8 n)
{
    while(n--);
}

/*---------------------------------------------------------------------------*/
/* Name     :
 * Input    :
 * Output   :
 * Description:
 *---------------------------------------------------------------------------*/
void reset_mx2012(void)
{
    GPIO_WriteBit(SDA, 1);
    //__NOP();;
    __NOP();//n_nop(1)
    GPIO_WriteBit(SCL, 1);
    __NOP();
    GPIO_WriteBit(SCL, 0);

    GPIO_WriteBit(SDA, 0);
    __NOP();
    GPIO_WriteBit(SCL, 1);
    __NOP();
    GPIO_WriteBit(SCL, 0);

    GPIO_WriteBit(SDA, 0);
    __NOP();
    GPIO_WriteBit(SCL, 1);
    __NOP();
    GPIO_WriteBit(SCL, 0);

    GPIO_WriteBit(SDA, 0);
    __NOP();
    GPIO_WriteBit(SCL, 1);
    __NOP();
    GPIO_WriteBit(SCL, 0);

    GPIO_WriteBit(SDA, 0);
    __NOP();
    GPIO_WriteBit(SCL, 1);
    __NOP();
    GPIO_WriteBit(SCL, 0);

    GPIO_WriteBit(SDA, 1);
    __NOP();
    GPIO_WriteBit(SCL, 1);
    __NOP();
    GPIO_WriteBit(SCL, 0);

    GPIO_WriteBit(SDA, 0);
    __NOP();
}

/*---------------------------------------------------------------------------*/
/* Name     :   data_mx2012
 * Input    :
 * Output   :
 * Description:
 *---------------------------------------------------------------------------*/
void data_mx2012(bool b_data)
{
    GPIO_WriteBit(SDA, b_data);
    __NOP();
    GPIO_WriteBit(SCL, 1);
    __NOP();
    GPIO_WriteBit(SCL, 0);

    GPIO_WriteBit(SDA, !b_data);
    __NOP();
    GPIO_WriteBit(SCL, 1);
    __NOP();
    GPIO_WriteBit(SCL, 0);
}

void data_b12_mx2012(bool b_data)
{
    GPIO_WriteBit(SDA, b_data);
    __NOP();
    GPIO_WriteBit(SCL, 1);
    __NOP();//3
    GPIO_WriteBit(SDA, !b_data);
    __NOP();//3
    GPIO_WriteBit(SCL, 0);
}


/*---------------------------------------------------------------------------*/
/* Name     :   en_mx2012
 * Input    :
 * Output   :
 * Description:
 *---------------------------------------------------------------------------*/
void en_mx2012(void)
{
    GPIO_WriteBit(SDA, 0);
    __NOP();
    GPIO_WriteBit(SCL,1);
    __NOP();
    GPIO_WriteBit(SCL, 0);

    GPIO_WriteBit(SDA, 1);
    __NOP();
    GPIO_WriteBit(SCL, 1);
    __NOP();
    GPIO_WriteBit(SCL, 0);

    GPIO_WriteBit(SDA, 1);
    __NOP();
    GPIO_WriteBit(SCL, 1);
    __NOP();
    GPIO_WriteBit(SCL, 0);

    GPIO_WriteBit(SDA, 1);
    __NOP();
    GPIO_WriteBit(SCL, 1);
    __NOP();
    GPIO_WriteBit(SCL, 0);

    GPIO_WriteBit(SDA, 1);
    __NOP();
    GPIO_WriteBit(SCL, 1);
    __NOP();
    GPIO_WriteBit(SCL, 0);

    GPIO_WriteBit(SDA, 0);
    __NOP();
    GPIO_WriteBit(SCL, 1);
    __NOP();
    GPIO_WriteBit(SCL, 0);
}

